// 日志消息类:
// 意义：中间存储一条日志消息所需的各项要素
// 1、日志的输出时间 用于过滤日志输出时间
// 2、日志等级 用于进行日志过滤分析
// 3、源文件名称
// 4、源代码行号 用于定位出现错误的代码位置
// 5、线程 ID 用于过滤出错的线程
// 6、日志主体消息
// 7、日志器名称 (当前支持多日志器的同时使用)
// 示例日志格式: [2003-08-16 12:38:26][root][12345678][main.c:99][FATAL]: 创建套接字失败...
#ifndef __MESSAGE_H__
#define __MESSAGE_H__
#include"util.hpp"
#include <thread>
namespace logsys {
    // 定义LogMsg结构体，用于存储日志消息相关信息
    struct LogMsg {
        time_t _ctime; // 记录日志产生的时间戳，可用于标识日志产生的时间
        LogLevel::value _level; // 记录日志等级，用于日志过滤分析
        size_t _line; // 记录源代码中的行号，方便定位出错位置
        std::thread::id _tid; // 记录产生日志的线程ID，可用于排查特定线程相关问题
        std::string _file; // 记录日志对应的源码文件名
        std::string _logger; // 记录日志器名称，支持多日志器时区分来源
        std::string _payload; // 记录有效的日志消息数据

        // 构造函数，用于初始化LogMsg结构体对象
        LogMsg(LogLevel::value level, 
               size_t line, 
               const std::string file, 
               const std::string logger, 
               const std::string msg) :
            _ctime(util::Date::now()), // 调用util::Date::now()获取当前时间戳来初始化_ctime
            _level(level), // 用传入的日志等级参数初始化_level
            _line(line), // 用传入的行号参数初始化_line
            _tid(std::this_thread::get_id()), // 获取当前线程ID初始化_tid
            _file(file), // 用传入的文件名参数初始化_file
            _logger(logger), // 用传入的日志器名称参数初始化_logger
            _payload(msg) // 用传入的日志消息参数初始化_payload
        {}
    };
}
#endif